#ifndef FTPCLIENT_H
#define FTPCLIENT_H

#include "ftpclient_global.h"
#include <QObject>
#include <QString>
#include <QFileInfo>

// 使用全局定义的宏，不需要再重复定义
class FTPCLIENT_EXPORT FtpClient : public QObject
{
    Q_OBJECT

public:
    explicit FtpClient(QObject *parent = nullptr);
    ~FtpClient();
    
    // 日志前缀静态常量
    static const QString LOG_PREFIX;
    
    // 配置相关方法
    void setUsePasv(bool usePasv);
    bool isUsingPasv();

    void setUsePasv2(bool usePasv2);
    bool isUsingPasv2() const;

public slots:
    // 异步连接到FTP服务器
    void connectToServer(const QString &host, const QString &username, const QString &password, int port = 21);
    // 异步断开连接
    void disconnectFromServer();
    // 异步获取文件列表
    void listFiles(const QString &path = ".");
    // 异步下载文件
    void downloadFile(const QString &remoteFile, const QString &localPath);
    void downloadFile(const QString& remoteFile, const QString& localPath, qint64 fileSize);
    // 异步上传文件
    void uploadFile(const QString &localFile, const QString &remotePath = ".");
    // 异步删除文件
    void deleteFile(const QString &fileName);
    // 异步切换目录
    void changeDirectory(const QString &directory);
    // 检查是否已连接
    bool isConnected() const;

signals:
    // 连接结果信号
    void connected(bool success, const QString &message = "");
    // 断开连接信号
    void disconnected();
    // 文件列表获取完成信号
    void fileListReceived(bool success, const QList<QStringList> &fileList, const QString &message);
    // 下载进度信号
    void downloadProgress(qint64 bytesRead, qint64 totalBytes);
    // 下载完成信号
    void downloadFinished(bool success, const QString &fileName, const QString &message = "");
    // 上传进度信号
    void uploadProgress(qint64 bytesSent, qint64 totalBytes);
    // 上传完成信号
    void uploadFinished(bool success, const QString &fileName, const QString &message = "");
    // 删除完成信号
    void deleteFinished(bool success, const QString &fileName, const QString &message = "");
    // 错误信号
    void error(const QString &message);
    // 目录切换结果信号
    void directoryChanged(bool success, const QString &directory, const QString &message);

private:
    class Private;
    Private *d;
};

#endif // FTPCLIENT_H